﻿using ConsoleApp19.One;
using ConsoleApp19.Two;
using System;

namespace ConsoleApp19
{
    class Program
    {
        static void Main(string[] args)
        {

            //Conetext:维护一个ConcreteState子类的实例，它可以定义当前的状态。
            //State:定义了一个所有具体状态的共同接口，也可以是抽象类，任何状态都实现这个相同的接口，这样一来，状态之间可以相互替换。
            //ConcreteState:处理来自Context的请求。每一个ConcreteState都提供了它自己对于请求的实现，所以，当Context状态发生改变时行为它也跟着改变。具体的状态可以有很多个。



            // Setup context in a state
            Context c = new Context(new ConcreteStateA());

            // Issue requests, which toggles state
            c.Request();
            c.Request();
            c.Request();
            c.Request();
            c.Request();



            Console.WriteLine();
            // 初始化电灯，原始状态为关  
            Light light = new Light(new Off());

            // 第一次按下开关，打开电灯  
            light.PressSwich();
            // 第二次按下开关，关闭电灯  
            light.PressSwich();

            light.PressSwich();
            light.PressSwich();
            light.PressSwich();

        }
    }

}
